#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>
#include <fcntl.h>
#include "validation.h"

int main(int argc, char *argv[]) {
    // 检查参数数量
    if (argc < 2) {
        fprintf(stderr, "Usage: %s <command> [args...]\n", argv[0]);
        return 1;
    }

    if (setuid(0) != 0) {
        fprintf(stderr, "setuid(0) error\n");
        return 1;
    }

    // 获取命令
    const char *command = argv[1];

    // 检查命令是否在允许的列表中
    if (!is_command_allowed(command)) {
        fprintf(stderr, "Command '%s' is not allowed.\n", command);
        return 1;
    }

    // 检查命令执行的路径是否在允许的列表中
    if (!check_command_path(&argv[1])) {
        fprintf(stderr, "Command '%s' path is not allowed.\n", command);
        return 1;
    }

    // 使用 execvp 执行命令，保留原来的参数数组
    execvp(command, &argv[1]);

    // 如果 execvp 返回，说明执行失败
    perror("Error executing command");
    return 1;
}